【设计模式】工厂模式
@(04【 设计模式 】)[=设计模式]
公司项目众多,不同项目基于芯片平台方案(Amlogic/全智/瑞芯微RK/Mstar),其 SDK 接口实现有区别,导致应用开发中需要添加 Model 判断语句,代码逻辑混乱,可读性低,引入xxxFramework 中间 Jar 包,其使用的设计模式为简单工厂。
工厂模式知识点梳理如下:
工厂模式分类
① 简单工厂模式
:
定义一个工厂类,根据传入不同参数返回不同实例,被创建的实例具有共同的父类与接口;
② 工厂方法模式
工厂方法模式是简单工厂进一步升级
定义:定义一个用于创建对象的接口,让子类决定将哪一个类实例化,工厂方法模式让类的实例化延迟到其子类
③ 抽象工厂模式
简单工厂模式实例Demo
创建根据不同厂家生产其对应品牌电脑
提取生产接口Computer
public interface Computer {
void product();
}
产品类:HuaWei
public class HuaWeiComputer implements Computer {
public HuaWeiComputer() {
System.out.println("Huawei");
}
@Override
public void product() {
System.out.println("Product HuaWei Computer ");
}
}
产品类:Lenovo
public class LenoverComputer implements Computer {
public LenoverComputer() {
System.out.println("Lenovo");
}
@Override
public void product() {
System.out.println("Product Lenovo Computer");
}
}
产品类:Mac
public class MacComputer implements Computer {
public MacComputer() {
System.out.println("MacBook");
}
@Override
public void product() {
System.out.println("Product MacBookPro Computer");
}
}
工厂类:
public class ComputerFactory {
public Computer createComputer(String type){
Computer computer = null;
switch (type){
case "HuaWei":
computer = new HuaWeiComputer();
break;
case "Lenover":
computer = new LenoverComputer();
break;
case "Mac":
computer = new MacComputer();
break;
}
return computer;
}
}
客户端:
public class Clients {
private void onCreat(){
ComputerFactory computerFactory = new ComputerFactory();
MacComputer macComputer = (MacComputer) computerFactory.createComputer("Mac");
macComputer.product();
HuaWeiComputer huaWeiComputer = (HuaWeiComputer) computerFactory.createComputer("HuaWei");
huaWeiComputer.product();
}
}
工厂方法模式Demo
实例:设计图片加载类,多个图片加载器,用来加载jpg、png、gif ,每个加载器有一个read 方法,读取图片
编写加载器共用接口:
public interface Reader {
void read();
}
Reader 里面只有一个read()方法,然后完成各个图片加载器的代码。
Jpg图片加载器
public class JpgReader implements Reader {
@Override
public void read() {
System.out.print("read jpg");
}
}
Png图片加载器
public class PngReader implements Reader {
@Override
public void read() {
System.out.print("read png");
}
}
Gif图片加载器
public class GifReader implements Reader {
@Override
public void read() {
System.out.print("read gif");
}
}
现在我们按照定义所说定义一个抽象的工厂接口ReaderFactory
public interface ReaderFactory {
Reader getReader();
}
里面有一个getReader()方法返回我们的Reader 类,接下来我们把上面定义好的每个图片加载器都提供一个工厂类,这些工厂类实现了ReaderFactory 。
Jpg加载器工厂
public class JpgReaderFactory implements ReaderFactory {
@Override
public Reader getReader() {
return new JpgReader();
}
}
Png加载器工厂
public class PngReaderFactory implements ReaderFactory {
@Override
public Reader getReader() {
return new PngReader();
}
}
Gif加载器工厂
public class GifReaderFactory implements ReaderFactory {
@Override
public Reader getReader() {
return new GifReader();
}
}
在每个工厂类中我们都通过复写的getReader()方法返回各自的图片加载器对象。
客户端使用
读取Jpg
ReaderFactory factory=new JpgReaderFactory();
Reader reader=factory.getReader();
reader.read();
读取Png
ReaderFactory factory=new PngReaderFactory();
Reader reader=factory.getReader();
reader.read();
读取Gif
ReaderFactory factory=new GifReaderFactory();
Reader reader=factory.getReader();
reader.read();
网友评论