设计模式总结之工厂模式
来源:互联网 发布:w8系统优化软件 编辑:程序博客网 时间:2024/05/21 21:37
除了直接使用new之外,还有更多制造对象的方法。工厂模式可以使实例化的活动不公开进行,也可以解决因初始化而造成的耦合问题。工厂模式是一种常见的模式,在安卓中BitmapFactory也是使用的简单工厂,但其实现起来的难度却很高。
简单工厂:
public class Test {public static void main(String[] args) throws Exception{Auto auto = (Auto) CarFactory.createCraByType("Auto");Chev chev = (Chev) CarFactory.createCraByType("Chev");Car car = CarFactory.createCraByType("aa");}}
public class CarFactory {public static Car createCraByType(String carType) throws Exception{if (carType.equals("Auto")) {return new Auto();}else if (carType.equals("Chev")) {return new Chev();}else {throw new Exception(){@Overridepublic String getMessage() {return "not find the car you want";}};}}}
public interface Car {}public class Auto implements Car{public Auto() {System.out.println("auto is created");}}public class Chev implements Car{public Chev() {System.out.println("chev is created");}}
介绍完简单工厂,接下来具体介绍一下工厂方法和抽象工厂。
工厂方法:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。其实要我理解工厂方法强调的是工厂和方法,不同的工厂有相同的方法,但是产生的却是不同工厂的产品。
public interface Car {}
public class Auto implements Car{public Auto() { System.out.println("auto is created");}}
public class Chev implements Car{public Chev() {System.out.println("Chec is created");}}
public interface CarFactory {public Car createCar();}
public class AutoCarFactory implements CarFactory{@Overridepublic Car createCar() {return new Auto();}}
public class ChevFactory implements CarFactory {@Overridepublic Car createCar() {return new Chev();}}
public class Test {public static void main(String[] args){CarFactory carFactory = new AutoCarFactory();carFactory.createCar();carFactory = new ChevFactory();carFactory.createCar();}}抽象工厂:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
public class Auto implements Car{public Auto() { System.out.println("auto is created");}}
public class AutoCarFactory implements CarFactory{@Overridepublic Car createCar() {return new Auto();}@Overridepublic Suv createSUV() {// TODO Auto-generated method stubreturn new AutoSuv();}}
public class AutoSuv extends Suv{public AutoSuv() {System.out.println("AutoSur is created");}}
public interface Car {}
public interface CarFactory {public Car createCar();public Suv createSUV();}
public class Chev implements Car{public Chev() {System.out.println("Chec is created");}}
public class ChevFactory implements CarFactory {@Overridepublic Car createCar() {return new Chev();}@Overridepublic Suv createSUV() {// TODO Auto-generated method stubreturn new ChevSuv();}}
public class ChevSuv extends Suv{public ChevSuv() {System.out.println("ChevSuv is created");}}
public interface Suv {}
public class Test {public static void main(String[] args){CarFactory carFactory = new AutoCarFactory();Car car = carFactory.createCar();Suv suv =carFactory.createSUV();carFactory = new ChevFactory();car = carFactory.createCar();suv = carFactory.createSUV();}}
其实个人认为工厂方法和抽象工厂的根本区别在于是要产生单个产品还是产品家族。
0 0
- 设计模式总结之工厂模式
- 设计模式之工厂模式总结
- 设计模式学习总结之工厂模式
- 设计模式之简单工厂模式,工厂模式,抽象工厂模式学习总结
- 设计模式之简单工厂模式,工厂模式,抽象工厂模式学习总结
- 设计模式之简单工厂模式和策略模式总结
- 总结:java设计模式之---工厂方法
- 总结:java设计模式之----抽象工厂
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- SkipOut游戏实现代码
- C#:一个增强的TcpListener(*)服务器演示程序及源代码下载
- poj 2081 Recaman's Sequence
- 那些年的IOS系统以及经典改革
- Linux 进程控制
- 设计模式总结之工厂模式
- PAT乙级—1031. 查验身份证(15)-native
- Java的重载与重写
- Java中的匿名对象
- C#:一个增强的TcpListener(二)线程池
- C#:一个增强的TcpListener(一)构造函数
- 八数码问题
- 第十一周补充项目2-职员涨薪水了!!!
- bLue 的乘法算术题--Java大数