赞
踩
工厂模式属于创建型模式,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
1.有一个创建对象的接口。
2.创建过程在其子类执行。
优点:
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。(摘自:菜鸟教程)
1.简单工厂模式(静态工厂模式)
2.工厂方法模式
3.抽象工厂模式
1、创建人类接口
- package com.xiao.designpattern.factorypattern;
-
- /**
- * @Description 人类接口
- * @Auther: 笑笑
- * @Date: 14:41 2018/10/31
- */
- public interface Person {
-
- public void eat();
- }
2、创建男人‘类’
- package com.xiao.designpattern.factorypattern;
-
- /**
- * @Description 男人类,实现人类接口
- * @Auther: 笑笑
- * @Date: 14:41 2018/10/31
- */
- public class Male implements Person {
- @Override
- public void eat() {
- System.out.println("男人,是人类,要吃饭!");
- }
- }
3、创建女人‘类’
- package com.xiao.designpattern.factorypattern;
-
- /**
- * @Description 女人类,实现人类接口
- * @Auther: 笑笑
- * @Date: 14:43 2018/10/31
- */
- public class Female implements Person{
- @Override
- public void eat() {
- System.out.println("女人,是人类,要吃饭!");
- }
- }
4、创建人类工厂类
- package com.xiao.designpattern.factorypattern;
-
- /**
- * @Description 人类 工厂类
- * @Auther: 笑笑
- * @Date: 14:45 2018/10/31
- */
- public class PersonFactory {
-
- public Person getPerson(String personType){
- if(personType == null){
- return null;
- }
- if(personType.equalsIgnoreCase("MALE")){
- return new Male();
- }else if(personType.equalsIgnoreCase("FEMALE")){
- return new Female();
- }
- return null;
- }
- }

5、使用工厂类分别获取男人、女人对象
- package com.xiao.designpattern.factorypattern;
-
- /**
- * @Description 使用人类 工厂类获取 男人或女人 对象
- * @Auther: 笑笑
- * @Date: 14:48 2018/10/31
- */
- public class FactoryDemo {
-
- public static void main(String[] args){
- PersonFactory personFactory = new PersonFactory();
-
- //获取男人对象
- Person male = personFactory.getPerson("male");
- //调用eat方法
- male.eat();
-
- //获取女人对象
- Person female = personFactory.getPerson("female");
- //调用eat方法
- female.eat();
- }
- }

运行结果如下:
在统一的工厂接口中定义创建方法,特殊的工厂需要自己独立创建工厂,实现统一的工厂接口
- package com.xiao.designpattern.factorypattern.factorymethod;
-
- /**
- * @Description 创建人的统一工厂接口
- * @Auther: 笑笑
- * @Date: 21:45 2019/4/21
- */
- public interface PersonFactory {
-
- Person createPerson();
- }
- package com.xiao.designpattern.factorypattern.factorymethod;
-
- /**
- * @Description 创建男人的特殊工厂
- * @Auther: 笑笑
- * @Date: 21:46 2019/4/21
- */
- public class MaleFactory implements PersonFactory {
-
- @Override
- public Person createPerson() {
- return new Male();
- }
- }
- package com.xiao.designpattern.factorypattern.factorymethod;
-
- /**
- * @Description 创建女人的特殊工厂
- * @Auther: 笑笑
- * @Date: 21:47 2019/4/21
- */
- public class FemaleFactory implements PersonFactory {
-
- @Override
- public Person createPerson() {
- return new Female();
- }
- }
- package com.xiao.designpattern.factorypattern.factorymethod;
-
- /**
- * @Description 调用者
- * @Auther: 笑笑
- * @Date: 21:49 2019/4/21
- */
- public class client {
-
- public static void main(String[] args){
- //通过男人工厂创建男人
- MaleFactory maleFactory = new MaleFactory();
- Person person = maleFactory.createPerson();
- person.eat();
-
- //通过女人工厂创建女人
- FemaleFactory femaleFactory = new FemaleFactory();
- Person person1 = femaleFactory.createPerson();
- person1.eat();
- }
- }

运行结果如下:
- package com.xiao.designpattern.factorypattern.abstractfactory;
-
- /**
- * @Description 创建人的工厂
- * @Auther: 笑笑
- * @Date: 22:24 2019/4/21
- */
- public interface PersonFactory {
-
- Money HasMoney();
- }
-
-
-
- package com.xiao.designpattern.factorypattern.abstractfactory;
-
- /**
- * @Description 钱接口
- * @Auther: 笑笑
- * @Date: 22:20 2019/4/21
- */
- public interface Money {
- void money();
- }
-
- /**
- * @Description 很多钱的类
- * @Auther: 笑笑
- * @Date: 22:21 2019/4/21
- */
- class ManyMoney implements Money{
- @Override
- public void money() {
- System.out.println("很多很多钱!");
- }
- }
-
- /**
- * @Description 很少钱的类
- * @Auther: 笑笑
- * @Date: 22:24 2019/4/21
- */
- class LittleMoney implements Money{
- @Override
- public void money() {
- System.out.println("很少很少钱!");
- }
- }

- package com.xiao.designpattern.factorypattern.abstractfactory;
-
- /**
- * @Description 穷人的工厂类
- * @Auther: 笑笑
- * @Date: 22:27 2019/4/21
- */
- class PoorPersonFactory implements PersonFactory{
- @Override
- public Money HasMoney() {
- return new LittleMoney();
- }
- }
- package com.xiao.designpattern.factorypattern.abstractfactory;
-
- /**
- * @Description 富人的工厂类
- * @Auther: 笑笑
- * @Date: 22:26 2019/4/21
- */
- class WealthyPersonFactory implements PersonFactory{
-
- @Override
- public Money HasMoney() {
- return new ManyMoney();
- }
- }
- package com.xiao.designpattern.factorypattern.abstractfactory;
-
- /**
- * @Description 调用者
- * @Auther: 笑笑
- * @Date: 22:29 2019/4/21
- */
- public class Client {
- public static void main(String[] args){
- //通过富人的工厂类创建富人
- PersonFactory wealthyPersonFactory = new WealthyPersonFactory();
- Money money = wealthyPersonFactory.HasMoney();
- money.money();
-
- //通过穷人的工厂类创建穷人
- PersonFactory poorPersonFactory = new PoorPersonFactory();
- Money money1 = poorPersonFactory.HasMoney();
- money1.money();
- }
- }

运行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。