码迷,mamicode.com
首页 > 其他好文 > 详细

工厂设计模式

时间:2020-03-18 13:38:49      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:end   factor   equal   int()   else   png   printf   抽象工厂模式   col   

工厂模式

通常由我们自己创建(new) 对象 增加了程序的耦合度 为了将对象创建使用相分离 采用工厂模式
工厂负责创建对象 我们直接从工厂里面取对象就行 将实例化的过程封装起来 进行统一管理

 

简单工厂模式

技术图片

 

 

// 打印机接口 
public interface Print {
    // 获得打印机的名字
    String getName();
}

 

 

 

public class ColorPrint implements Print{
    @Override
    public String getName() {
        return "彩色打印机";
    }
}
public class BlackPrint implements Print {
    @Override
    public String getName() {
        return "黑白打印机";
    }
}

 

 

public class PrintTest {
    public static void main(String[] args) {
        // 每次使用打印机的时候 都需要自己new对象 增加了程序之间的耦合度
        Print print = new BlackPrint();
        Print print1 = new ColorPrint();
        System.out.println(print.getName());
        System.out.println(print1.getName());
    }
}

 

增加工厂类

public class SimpleFactory {
    public static Print getPrint(String name){
        if(name.equals("1")){
            return  new ColorPrint();
        }else if(name.equals("2")){
            return  new BlackPrint();
        }
        return null;
    }
}
 public static void main(String[] args) {
        // 由工厂创建对象 统一管理对象
        Print print1 = SimpleFactory.getPrint("1");
        System.out.println(print1.getName());
        Print print2 = SimpleFactory.getPrint("2");
        System.out.println(print2.getName());
    }

 

简单工厂的弊端

每次向工厂拿对象 还要输入指定的类型

技术图片

工厂方法模式

将实例化的过程 交给子类

 

技术图片

 

 

// 工厂接口
public interface Factory {
    Print getPrint();
}

----------------------
// 彩色打印机工厂
public class ColorFactroy implements Factory {
    @Override
    public Print getPrint() {
        return new ColorPrint();
    }
}
----------------------
// 黑白打印机工厂
public class BlackFactroy implements Factory {
    @Override
    public Print getPrint() {
        return new BlackPrint();
    }
}
 public static void main(String[] args) {
        Factory factory0 = new BlackFactroy();
        Factory factory1 = new ColorFactroy();
        System.out.println(factory0);
        System.out.println(factory1);
    }

 

工厂方法的弊端: 

假如我要新增一个激光打印

// 创建打印机类 实现打印机接口
public class LaserPrint implements Print {
    @Override
    public String getName() {
        return "激光打印机";
    }
}

----------------
// 创建激光打印机工厂 实现工厂接口
public class LastPrintFactroy implements Factory {
    @Override
    public Print getPrint() {
        return new LaserPrint();
    }
}

 

虽然不用指定类型来创建工厂 但每次使用工厂 还得new 指定打印机的工厂

如果每次新增一个打印机 就得实现Factroy接口 创建打印机的工厂的类

 

抽象工厂模式

技术图片

 

 

 

// 创建抽象工厂类
public abstract class AbstractFactory {
    abstract Print getColorPrint();
    abstract Print getBlackPrint();
}

// 创建打印机工厂 继承抽象工厂类

public class PrintFactroy extends AbstractFactory {
    @Override
    Print getColorPrint() {
        return new ColorPrint();
    }

    @Override
    Print getBlackPrint() {
        return new BlackPrint();
    }
}
  public static void main(String[] args) {
        // 只需要实例抽象工厂即可
       AbstractFactory abstractFactory = new PrintFactroy();
        Print blackPrint1 = abstractFactory.getBlackPrint();
        Print blackPrint2 = abstractFactory.getColorPrint();
    }

 

 

新增激光打印机

// 实现打印机接口
public class LaserPrint implements Print {
    @Override
    public String getName() {
        return "激光打印机";
    }
}

----------------------
public abstract class AbstractFactory {
    abstract Print getColorPrint();
    abstract Print getBlackPrint();
    // 新增激光打印机
    abstract Print getLaserPrint();
}

--------------------

// 在 PrintFactroy 类 重写机关打印机即可

 @Override
    Print getLaserPrint() {
        return new LaserPrint();
    }

 

‘使用抽象工厂 新增打印机的时候 只需要在抽象工厂新增激光打印机 打印机工厂类重写方法即可 不需要创建新的对象 也不需要修改原来的代码

工厂设计模式

标签:end   factor   equal   int()   else   png   printf   抽象工厂模式   col   

原文地址:https://www.cnblogs.com/chenziyue/p/12516607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!