simpleFactory

//car接口
public interface Car {
void run();
} //两个实现类
public class Audi implements Car{ public void run() {
System.out.println("奥迪在跑");
} } public class Byd implements Car{ public void run() {
System.out.println("Byd在跑");
} }

Car接口以及两个实现类

//第一种实现
public class CarFactory {
public static Car createCar(String type){
if("奥迪".equals(type)){
return new Audi();
}else if("比亚迪".equals(type)){
return new Byd();
}else{
return null;
}
}
} //第二种实现
public class CarFactory2 {
public static Car createAudi(){
return new Audi();
} public static Car createByd(){
return new Byd();
}
}

工厂类实现

/**
* 普通模式,无工厂模式
* @author benny
*
*/ public class Client01 {
public static void main(String[] args) {
Car c1 = new Audi();
Car c2 = new Byd(); c1.run();
c2.run();
}
} /**
* 简单工厂模式
* @author benny
*
*/ public class Client02 {
public static void main(String[] args) {
Car c1 = CarFactory.createCar("奥迪");
Car c2 = CarFactory.createCar("比亚迪"); c1.run();
c2.run();
}
}

调用

factoryMethod

public interface Car {
void run();
} public class Audi implements Car{ public void run() {
System.out.println("奥迪在跑");
} } public class Benz implements Car{ public void run() {
System.out.println("奔驰在跑");
} } public class Byd implements Car{ public void run() {
System.out.println("Byd在跑");
} }

car接口及其实现

public interface CarFactory {
Car createCar();
} public class AudiFactory implements CarFactory { @Override
public Car createCar() {
return new Audi(); } } public class BenzFactory implements CarFactory { @Override
public Car createCar() {
return new Benz(); } } public class BydFactory implements CarFactory { @Override
public Car createCar() {
return new Byd(); } }

工厂接口及其实现

/**
* 最大的好处实现了开闭原则
* @author benny
*
*/
public class Client {
public static void main(String[] args) {
Car c1 = new AudiFactory().createCar();
Car c2 = new BydFactory().createCar();
Car c3 = new BenzFactory().createCar(); c1.run();
c2.run();
c3.run();
}
}

调用

abstractFactory

public interface Engine {
void run();
void start();
} class LuxuryEngine implements Engine{ @Override
public void run() {
System.out.println("转得快"); } @Override
public void start() {
System.out.println("启动快,可以自动启停"); } } class LowEngine implements Engine{ @Override
public void run() {
System.out.println("转得慢"); } @Override
public void start() {
System.out.println("启动慢,不可以自动启停"); } }

引擎接口及其实现

public interface Tyre {
void revolve();
} class LuxuryTyre implements Tyre{ @Override
public void revolve() {
System.out.println("旋转不磨损"); } } class LowTyre implements Tyre{ @Override
public void revolve() {
System.out.println("磨损快"); } }

轮胎接口及其实现

public interface Seat {
void massage();
} class LuxurySeat implements Seat{ @Override
public void massage() {
System.out.println("可以按摩"); } } class LowSeat implements Seat{ @Override
public void massage() {
System.out.println("不能按摩"); } }

座椅接口及其实现

public interface CarFactory {
Engine createEngine();
Seat createSeat();
Tyre createTyre();
} public class LowCarFactory implements CarFactory{ @Override
public Engine createEngine() {
return new LowEngine(); } @Override
public Seat createSeat() {
return new LowSeat();
} @Override
public Tyre createTyre() {
return new LowTyre();
} } public class LuxuryCarFactory implements CarFactory{ @Override
public Engine createEngine() {
return new LuxuryEngine(); } @Override
public Seat createSeat() {
return new LuxurySeat();
} @Override
public Tyre createTyre() {
return new LuxuryTyre();
} }

工厂接口及其实现

public class Client {
public static void main(String[] args) {
CarFactory factory = new LuxuryCarFactory();
Engine e =factory.createEngine();
e.run();
e.start();
}
}

调用

设计模式之工厂模式 Factory实现的更多相关文章

  1. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  2. python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)

    十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...

  3. 设计模式之工厂模式(Factory模式)

    在面向对象系统设计中经常遇到以下两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的 ...

  4. 设计模式~简单工厂模式(Factory)

    简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例.通常它返回的类都有一个公共的父类(或者接口对象). 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类 ...

  5. 【设计模式】工厂模式 Factory Pattern

    1)简单工厂(不是模式) 简单工厂只是一种变成习惯,并非23种设计模式之一. 简单工厂提供将实例话那种类型留给运行时判断,而非编译时指定.简单工厂模式就是由一个工厂类根据传入的参数决定创建出哪一个类的 ...

  6. JAVA设计模式之工厂模式—Factory Pattern

    1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...

  7. java设计模式之 工厂模式Factory

    好比某种套路,经过不断实践,证明对项目结构非常有利 如果需要获取某种对象,如同获取不同的产品 需要由工厂来提供,工厂模式 可能的类或者对象:工厂类  产品:Cat  Dog  Fish ... //动 ...

  8. 设计模式(一)工厂模式Factory(创建型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...

  9. 设计模式(一)工厂模式Factory(创建类型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...

随机推荐

  1. .Net平台互操作技术:02. 技术介绍

    上一篇文章简单介绍了.Net平台互操作技术的面临的主要问题,以及主要的解决方案.本文将重点介绍使用相对较多的P/Invoke技术的实现:C#通过P/Invoke调用Native C++ Dll技术.C ...

  2. SlickEdit 18.0 版本发布 同时更新破解文件

    18.0版本没有太大的惊喜 多了如下功能 Multiple Document Group Interface Repository Log Browser History Diff Support f ...

  3. Linux系统日志分析

    Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 / ...

  4. BZOJ 4423: [AMPPZ2013]Bytehattan 并查集+平面图转对偶图

    4423: [AMPPZ2013]Bytehattan Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 277  Solved: 183 [Submit ...

  5. 学习Unity 4.6新GUI系统

    (搬运自我在SegmentFault的博客) 最近在学习Unity的过程中,自己做一款小游戏自娱自乐.自然需要用到GUI.但4.5中的GUI很难用,一个选择是传说中的NGUI插件.但对于4.6中的新G ...

  6. UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)

    非常适合A*的一道题. 比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量. #include<cstdio> #include<cstring> #include< ...

  7. 如何使用TensorFlow Hub和代码示例

    任何深度学习框架,为了获得成功,必须提供一系列最先进的模型,以及在流行和广泛接受的数据集上训练的权重,即与训练模型. TensorFlow现在已经提出了一个更好的框架,称为TensorFlow Hub ...

  8. pycharm创建工程的两种形式:virtualenv环境和系统默认编译器

    转自:http://swiftlet.net/archives/3151 pycharm创建工程的时候可以选择编译器,如下图所示: 上图表示创建工程有两种方式:第一种是利用:virtualenv,第二 ...

  9. websocket+订阅发布者模式模拟实现股票价格实时刷新

    1.新建文件夹 2.文件夹中新建index.html 和 index.js index.html <!DOCTYPE html> <html lang="en"& ...

  10. js函数式编程(二)-柯里化

    这节开始讲的例子都使用简单的TS来写,尽量做到和es6差别不大,正文如下 我们在编程中必然需要用到一些变量存储数据,供今后其他地方调用.而函数式编程有一个要领就是最好不要依赖外部变量(当然允许通过参数 ...