设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)
2016-09-04 18:58
507 查看
本文出自
代码大湿
代码大湿
本系列持续更新,敬请关注。
源码请点击我
角色:
UML:
code:
AbstractFactory角色:
UML:
源码点击我
场景:选用不同的方案来装机,主要是让cpu和主板配套。
code:
abstractProduct
abstractProduct
ConcreteProduct
ConcreteProduct
ConcreteProduct
AbstractFactory
ConcreteFactory
ConcreteFactory
Client
output:
本文出自
代码大湿
代码大湿
欢迎与广大coder交流技术
QQ:1228935432
WX:WX1228935432
代码大湿
代码大湿
本系列持续更新,敬请关注。
1 静态工厂
静态工厂介绍:静态工厂模式可以实现接口封装隔离的原则。在客户端只知接口而不知实现的时候可以使用静态工厂模式。
源码请点击我
角色:
Product:客户端需要使用的接口。 ConcreteProduct:Product的具体实现。 Factory:拥有静态方法的工厂类,返回ConcreteProduct实例。 Client:只知到Product。但是并不知道具体实现。
UML:
code:
package 设计模式.staticFactary; /* *2016年8月26日 上午10:15:22 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface Product { public void operation(); }
package 设计模式.staticFactary; /* *2016年8月26日 上午10:15:00 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class ConcreteProduct implements Product{ @Override public void operation() { System.out.println("我是具体产品中的实现方法"); } }
package 设计模式.staticFactary; /* *2016年8月26日 上午10:47:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Factory { public static Product getProduct(){ return new ConcreteProduct(); } }
package 设计模式.staticFactary; /* *2016年8月26日 上午10:48:05 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Client { public static void main(String[] args) { Product product=Factory.getProduct(); product.operation(); } }
2 AbstractFactory(抽象工厂)
AbstractFactory介绍:AbstractFactory是为一系列相关的或者相互依赖的类创建接口,客户端不用关注他们的实现。相当如一个AbstractFactory的实现创建一个产品族。
AbstractFactory角色:
abstractProduct:抽象产品类。 ConcreteProduct:具体的产品实现。 abstractFactory:抽象工厂。 ConcreteFactory:具体的工厂实现。
UML:
源码点击我
场景:选用不同的方案来装机,主要是让cpu和主板配套。
code:
abstractProduct
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface CpuAPI { public void calculate(); }
abstractProduct
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface MainBoardAPI { void install(); }
ConcreteProduct
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class IntellCpu implements CpuAPI{ Integer cpuPins; public IntellCpu(Integer pins) { cpuPins=pins; } @Override public void calculate() { System.out.println("Intell cpu 正在计算....."+"pins:"+cpuPins); } }
ConcreteProduct
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class AMDCpu implements CpuAPI{ Integer cpuPins; public AMDCpu(Integer pins) { cpuPins=pins; } @Override public void calculate() { System.out.println("AMD cpu 正在计算....."+"pins:"+cpuPins); } }
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ ConcreteProduct //技嘉主板 public class GigaMainboard implements MainBoardAPI{ //插入cpu的接口pin数 Integer pins ; public GigaMainboard(Integer pins) { this.pins=pins; } @Override public void install() { System.out.println("技嘉主板正在安装.....pin数:"+pins); } }
ConcreteProduct
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ //微星主板 public class MSIMainboard implements MainBoardAPI{ //插入cpu的接口pin数 Integer pins ; public MSIMainboard(Integer pins) { this.pins=pins; } @Override public void install() { System.out.println("微星主板正在安装.....pin数:"+pins); } }
AbstractFactory
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:29:07 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface AbstractFactory { CpuAPI createCPU(); MainBoardAPI createMainBoardAPI(); }
ConcreteFactory
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class ConcreteFactoryA implements AbstractFactory{ @Override //intell cpu public CpuAPI createCPU() { return new IntellCpu(1156); } //技嘉主板 @Override public MainBoardAPI createMainBoardAPI() { return new GigaMainboard(1156); } }
ConcreteFactory
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class ConcreteFactoryB implements AbstractFactory{ @Override //AMD cpu public CpuAPI createCPU() { return new AMDCpu(939); } //微星主板 @Override public MainBoardAPI createMainBoardAPI() { return new MSIMainboard(939); } }
Client
package 设计模式.abstractFactory; /* *2016年9月2日 上午10:39:15 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Engineer { AbstractFactory schemal; public Engineer(AbstractFactory schemal) { this.schemal = schemal; } public void setSchemal(AbstractFactory schemal) { this.schemal = schemal; } public void makeAndUseComputer(){ CpuAPI cpu=schemal.createCPU(); MainBoardAPI mainBoard=schemal.createMainBoardAPI(); cpu.calculate(); mainBoard.install(); } }
package 设计模式.abstractFactory; import static org.junit.Assert.*; import java.nio.channels.NonWritableChannelException; import javax.swing.border.AbstractBorder; import org.junit.Test; /* *2016年9月2日 上午10:35:51 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Client { @Test public void test() { System.out.println("装机方案A"); //装机模式1 AbstractFactory schemalA=new ConcreteFactoryA(); Engineer engineer=new Engineer(schemalA); engineer.makeAndUseComputer(); System.out.println("装机方案B"); //装机模式2 AbstractFactory schemalB=new ConcreteFactoryB(); engineer.setSchemal(schemalB); engineer.makeAndUseComputer(); } }
output:
装机方案A Intell cpu 正在计算.....pins:1156 技嘉主板正在安装.....pin数:1156 装机方案B AMD cpu 正在计算.....pins:939 微星主板正在安装.....pin数:939
本文出自
代码大湿
代码大湿
欢迎与广大coder交流技术
QQ:1228935432
WX:WX1228935432
相关文章推荐
- 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)
- 实战设计模式系列-AbstractFactory(抽象工厂)
- 设计模式学习003——工厂模式(工厂方法、抽象工厂),简单工厂【也叫静态工厂】
- 设计模式:浅析 抽象工厂、工厂方法、简单(静态)工厂 java实现
- 设计模式:浅析 抽象工厂、工厂方法、简单(静态)工厂 java实现
- [设计模式](二):工厂模式(简单工厂|静态工程、工厂方法|多工厂、抽象工厂)
- 【设计模式】静态工厂、工厂方法和抽象工厂的联系与区别
- 设计模式之静态工厂、工厂方法和抽象工厂的联系与区别
- 设计模式系列四 工厂(工厂方法、抽象工厂)模式介绍
- 设计模式系列---简单工厂、工厂方法、抽象工厂
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
- 每周一个设计模式之工厂方法与抽象工厂
- 设计模式--抽象工厂(AbstractFactory)
- AbstractFactory抽象工厂设计模式
- 温故而知新:设计模式之抽象工厂(AbstractFactory)
- 设计模式之AbstractFactory(抽象工厂)
- 简单工厂模式(未完成)——小鸟学习设计模式笔记系列
- 白话设计模式--抽象工厂(AbstractFactory)
- C#设计模式之抽象工厂(AbstractFactory)
- 设计模式之抽象工厂(AbstractFactory)---用抽象工厂实现网页样式生成器