设计模式-简单工厂模式例子

Posted 百里东君~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-简单工厂模式例子相关的知识,希望对你有一定的参考价值。

工厂模式的意义:
将实例化对象的代码提取出来,放到一个类中统一维护和管理,达到和主项目的依赖关系的解耦,从而提高项目的扩展和维护性。

例子1
「反例:」

String medalType = "guest";
if ("guest".equals(medalType)) 
    System.out.println("嘉宾勋章");
  else if ("vip".equals(medalType)) 
    System.out.println("会员勋章");
 else if ("guard".equals(medalType)) 
    System.out.println("展示守护勋章");

首先,我们把每个条件逻辑代码块,抽象成一个公共的接口,我们根据每个逻辑条件,定义相对应的策略实现类,可得以下代码:

//勋章接口
public interface IMedalService 
    void showMedal();


//守护勋章策略实现类
public class GuardMedalServiceImpl implements IMedalService 
    @Override
    public void showMedal() 
        System.out.println("展示守护勋章");
    

//嘉宾勋章策略实现类
public class GuestMedalServiceImpl implements IMedalService 
    @Override
    public void showMedal() 
        System.out.println("嘉宾勋章");
    

//VIP勋章策略实现类
public class VipMedalServiceImpl implements IMedalService 
    @Override
    public void showMedal() 
        System.out.println("会员勋章");
    


接下来,我们再定义策略工厂类,用来管理这些勋章实现策略类,如下:

//勋章服务工产类
public class MedalServicesFactory 

    private static final Map<String, IMedalService> map = new HashMap<>();
    static 
        map.put("guard", new GuardMedalServiceImpl());
        map.put("vip", new VipMedalServiceImpl());
        map.put("guest", new GuestMedalServiceImpl());
    
    public static IMedalService getMedalService(String medalType) 
        return map.get(medalType);
    

优化后,正例如下:

ublic class Test
public static void main(String[] args)
String medalType = “guest”;
IMedalService medalService = MedalServicesFactory.getMedalService(medalType);
medalService.showMedal();

例子2

public class Factory 
    public static void main(String[] args) 
        new OrderPizza(new SimpleFactory());
    


//订购pizza
class OrderPizza
    SimpleFactory simpleFactory;
    Pizza pizza;

    public OrderPizza (SimpleFactory simpleFactory)
        setFactory(simpleFactory);
    

    public void setFactory(SimpleFactory simpleFactory)
        String orderType="";//用户输入
        this.simpleFactory = simpleFactory;
        do 
            orderType=getType();
            pizza=this.simpleFactory.createPizza(orderType);
            if (pizza!=null)
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            else 
                System.out.println("订购失败");
            

        while(true);
    

    public String getType()
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要订购的pizza:");
        return scanner.nextLine();
    




//简单工厂
class SimpleFactory 
    Pizza pizza;
    public Pizza createPizza(String orderType) 
        if (orderType.equals("cheese")) 
            pizza = new CheesePizza();
            pizza.setName("奶酪披萨");
        else if(orderType.equals("pepper"))
            pizza = new PepperPizza();
            pizza.setName("胡椒披萨");
        
        return pizza;
    


//芝士披萨
class CheesePizza extends Pizza 
    @Override
    public void prepare() 
        System.out.println("准备芝士");
    


//胡椒披萨
class PepperPizza extends Pizza 
    @Override
    public void prepare() 
        System.out.println("准备胡椒");
    


//pizza
abstract class Pizza 
    protected String name;

    //准备原材料不同的pizza,抽象方法
    public abstract void prepare();

    //烘烤
    public void bake() 
        System.out.println(name + "baking");
    

    //切割
    public void cut() 
        System.out.println(name + "cuting");
    

    //打包
    public void box() 
        System.out.println(name + "boxing");
    

    public void setName(String name) 
        this.name = name;
    


以上是关于设计模式-简单工厂模式例子的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之工厂方法模式

工厂模式简单例子

设计模式-简单工厂模式例子

简单工厂模式工厂方法模式抽象工厂模式 用图理解

JavaScript设计模式--简单工厂模式例子---XHR工厂

32面向对象设计模式之工厂方法模式——工厂方法对之前的例子进行改造