首页 > 其他 > 详细

设计模式-工厂模式

时间:2020-12-23 12:53:14      阅读:30      评论:0      收藏:0      [点我收藏+]

工厂模式是一个大的家族   作用:将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑

简单工厂模式

工厂方法模式

抽象工厂模式

 

简单工厂模式

1.问题 service实现类 需要依赖 dao实现类 

技术分享图片
public interface NewsDao {
    public void save(News news);
}
NewsDao
技术分享图片
public class NewsDaoImpl implements NewsDao {
    @Override
    public void save(News news) {
        System.out.println("\"保存到数据库\" = " + "保存到数据库");
    }
}
NewsDaoImpl
技术分享图片
public class News implements Serializable{

    private int no;
    private String title;
    private String author;
    private Date createTime;

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public News() {
    }

    public News(int no, String title, String author, Date createTime) {
        this.no = no;
        this.title = title;
        this.author = author;
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "News{" +
                "no=" + no +
                ", title=‘" + title + \‘ +
                ", author=‘" + author + \‘ +
                ", createTime=" + createTime +
                };
    }
}
News
技术分享图片
public interface NewsService {
    public void save(News news);
}
NewsService
public class NewsServiceImpl implements NewsService{

    //NewsServiceImpl 依赖 NewsDaoImpl
    private NewsDao dao = new NewsDaoImpl();

    @Override
    public void save(News news) {
        dao.save(news);
    }
}

2.简单工厂模式 解决问题 

public class SimpleFactory {

    public static NewsDao getInstance(){
        return  new NewsDaoImpl();
    }
}
public class NewsServiceImpl implements NewsService{

    //简单工厂是通过工厂类 创建 目标对象
    //实质是简单工厂定义了一个创建目标对象的类  封装了实例化对象的行为
    private NewsDao dao = SimpleFactory.getInstance();

    @Override
    public void save(News news) {
        dao.save(news);
    }
}

3.工厂方法模式    简单工厂模式不适合处理逻辑复杂的情况   如果工厂的产品逻辑复杂的话 工厂类难以维护

工厂方法模式是对简单工厂模式的进一步抽象化

3.1定义JDBC功能接口  它的实现类

技术分享图片
public interface JDBC {
    /**
     * 返回JDBC管理对象
     */
    public void getManager();
}
JDBC
public class MySQLJDBC implements JDBC {

    @Override
    public void getManager() {
        System.out.println("MySQL JDBC!");
    }
}
public class OracleJDBC implements JDBC {

    @Override
    public void getManager() {
        System.out.println("Oracle JDBC!");
    }
}
public class SQLServerJDBC implements JDBC {

    @Override
    public void getManager() {
        System.out.println("SQL Server JDBC!");
    }
}

3.2JDBC工厂接口 实现类

public interface JDBCFactory {
    public  JDBC getJDBC();
}

 

public class MySQLJDBCFactory implements JDBCFactory{
    @Override
    public JDBC getJDBC() {
        return new MySQLJDBC();
    }
}

 

public class OracleJDBCFactory implements JDBCFactory{
    @Override
    public JDBC getJDBC() {
        return new OracleJDBC();
    }
}

 

public class SQLServerJDBCFactory implements JDBCFactory{
    @Override
    public JDBC getJDBC() {
        return new SQLServerJDBC();
    }
}

3.3使用定义 工厂接口的子类工厂 完成具体产品的功能

public class JDBCOperating {
    //原来的操作  private JDBC jdbc=new MySQLJDBC();
    private JDBC jdbc;
    public void setJdbc(JDBC jdbc) {
        this.jdbc = jdbc;
    }

    public void use() {
        jdbc.getManager();
    }
    
    public static void main(String[] args) {
        JDBCOperating operating=new JDBCOperating();
        
        //工厂类对象
        JDBCFactory factory=new MySQLJDBCFactory();//创建工厂对象
        JDBC jdbc=factory.getJDBC();//获得JDBC: 功能类型
        //工厂对象,传入到目标类中
        operating.setJdbc(jdbc);//将功能类传入到 目标类中: setter
        
        operating.use();
    }
}

 

设计模式-工厂模式

原文:https://www.cnblogs.com/wf-zhang/p/14177489.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!