一、工厂模式之简单工厂模式Simple Factory Pattern
工厂模式,Spring用的比较多
1>我们新建一个Dao接口
package com.kaishengit.factory.simple;
public interface Dao {
public void save();
}
接下来我们新建两个实现类:
1.MySqlDao.java
package com.kaishengit.factory.simple;
public class MySqlDao implements Dao{
@Override
public void save() {
System.out.println("使用MySql存储数据!");
}
}
2.OracleDao.java
package com.kaishengit.factory.simple;
public class OracleDao implements Dao{
@Override
public void save() {
System.out.println("使用Oracle存储数据!");
}
}
2>1.我们在源文件夹中新建一个配置文件bean.properties
#key=beanName
oracleDao=com.kaishengit.factory.simple.OracleDao
mySqlDao=com.kaishengit.factory.simple.MySqlDao
2.接下来 我们新建一个工厂BeanFactory.java
package com.kaishengit.factory.simple;
import java.io.IOException;
import java.util.Properties;
public class BeanFactory {
private BeanFactory(){}
private static Properties pro;
static{
pro = new Properties();
try {
pro.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static Object getBean(String beanName){
if(pro.containsKey(beanName)){
String className = pro.getProperty(beanName);
try {
return Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
3>我们测试一下
Test
package com.kaishengit.factory.simple;
public class Test {
public static void main(String[] args) {
Dao dao = (Dao) BeanFactory.getBean("mySqlDao");
dao.save();
}
}
运行结果:
使用MySql存储数据!
如果我们把beanName换成oracleDao,则运行结果为→使用Oracle存储数据!
...ok...
二、工厂模式之工厂方法模式(Factory Method)
工厂方法模式定义了一个创建对象的接口,但由子类(实现类)决定要实例化的类是
哪一个。工厂方法让类把实例化推迟到子类(实现类)。
这里我们以水果种类为例
1>我们新建一个Fruit接口和一个FruitFactory接口
package com.kaishengit.factory.method;
public interface Fruit {
public void plant();
public void grow();
public void harvest();
}
package com.kaishengit.factory.method;
public interface FruitFactory {
public Fruit createFruit(String type);//根据水果种类划分,例如:苹果、橘子...
}
2>1.这里我们只新建一个AppleFactory:实现FruitFactory接口
package com.kaishengit.factory.method;
public class AppleFactory implements FruitFactory{
@Override
public Fruit createFruit(String type) {
if("hongfushi".equals(type)){
return new HongfushiApple();
}
return null;
}
}
2.我们只新建苹果中的一种品种:HongfushiApple:实现Fruit接口
package com.kaishengit.factory.method;
public class HongfushiApple implements Fruit{
@Override
public void plant() {
System.out.println("种植红富士");
}
@Override
public void grow() {
}
@Override
public void harvest() {
}
}
3>接下来我们测试一下:
package com.kaishengit.factory.method;
public class Test {
public static void main(String[] args) {
FruitFactory ff = new AppleFactory();
Fruit f = ff.createFruit("hongfushi");
f.plant();
}
}
运行结果:
种植红富士
...ok...,方法模式的精髓:根据种类划分,像这里是根据水果种类划分的
三、工厂模式之抽象工厂(Abstract Factory)
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
这种模式是根据系列划分的,这里我们把水果分为:热带系列和亚热带系列,我们只写一下热带系列
1>我们新建三个接口:Fruit、Veggie、Factory
package com.kaishengit.factory.abstract_p;
public interface Fruit {
}
package com.kaishengit.factory.abstract_p;
public interface Veggie {
}
package com.kaishengit.factory.abstract_p;
public interface Factory {
public Fruit createFruit(String type);
public Veggie createVeggie(String type);
}
2>我们新建一个热带工厂(TropicalFactory)、一个热带水果(TropicalFruit)
package com.kaishengit.factory.abstract_p;
public class TropicalFactory implements Factory{
@Override
public Fruit createFruit(String type) {
return new TropicalFruit();
}
@Override
public Veggie createVeggie(String type) {
return null;
}
}
package com.kaishengit.factory.abstract_p;
public class TropicalFruit implements Fruit{
public TropicalFruit() {
System.out.println("这是一个热带水果");
}
}
3>最后我们测试一下:
package com.kaishengit.factory.abstract_p;
public class Test {
public static void main(String[] args) {
Factory factory = new TropicalFactory();
factory.createFruit("");
}
}
运行结果:
这是一个热带水果
工厂模式:
模式运用最重要的是思想:简单工厂模式适合一个对象,方法模式适合一个品种,抽象模式适合一个系列,也就是它们分别是按对象、种类、系列(群体)来划分的
分享到:
相关推荐
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
“[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...
Head First 设计模式 (四) 工厂模式(factory pattern) C++实现
Head.First设计模式中的The Factory Pattern(工厂模式)ppt
设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式(Factory)-创建型模式 (100%...
抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 单例模式(Singleton Pattern) 结构型模式用来处理类或者对象的组合,主要包含以下7种设计...
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method 3)、抽象工厂型:Abstract Factory 4)、原型:Prototype 5)、建造型:Builder 2、结构型模式:类与类之间的调用 1...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...
NULL 博文链接:https://lym6520.iteye.com/blog/698013
java设计模式:DAO模式 DAO设计模式 DAO的理解 1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的 其实就是个思路。 2、DAO理论上是没有层数限制的。 3、DAO的各层理论上是没有先后的。 DAO...
简单工厂模式实际上不属于23个GoF模式,但它可以作为GoF的工厂方法模式(Factory Method)的一个引导。 UML: <<Interface>> ConcreteProduct Creator Product ------------- interface() ...
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter ...
5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER ...
C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)-Simple Factory Pattern C#设计模式(3) - 设计原则(2) C#设计模式(2) - 设计原则(1) C#设计模式(1) - ...
C# 32种设计模式: 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) ...
C#设计模式(4)-Simple Factory Pattern 24 一、 简单工厂(Simple Factory)模式 24 二、 Simple Factory模式角色与结构: 24 三、 程序举例: 25 四、 Simple Factory模式演化 27 五、 优点与缺点: 29 C#设计...
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的...
工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式...