设计模式抽象工厂模式之模拟出租出售

Posted lisin-lee-cooper

tags:

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

一.概念

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

二.场景

北上广深不相信眼泪,北上广深房价也高不可攀,在这些城市上班的人,租房和买房都是十分关键的,租的好走路上班,租不好1小时以上通勤也是分分钟的事,那买房的话就更不在话下了,这里为了业务或者产品划分,往往会把出租和出售对应两个产品簇,抽象工厂正是为了解决此类问题,而工厂模式是更多是为了解决单一产品的问题,此案例配合使用代理模式,当同一产品簇里新增对象时,使得工厂在创建对象时无需再新增if/else代码.

三类图及代码实现

1.类图
抽象工厂模式

2.代码实现

2.1出租租入接口

public interface Intermediary {

    default void lease(){

    }

    default void rent(){

    }

}

2.2出租实现

public class LeaseServiceImpl implements Intermediary {

    @Override
    public void lease() {
        System.out.println("出租");
    }

}

2.3租入实现

public class RentServiceImpl implements Intermediary {
    @Override
    public void rent() {
        System.out.println("租入");
    }
}

2.4 出售购买交易接口

public interface Customer {

    void deal();

}

2.5 买家

public class Buyer implements Customer{

    @Override
    public void deal() {
        System.out.println("购买");
    }
}

2.6 卖家

public class Seller implements Customer {
    @Override
    public void deal() {
        System.out.println("售出");
    }
}

2.7执行代理方法工具类

public class ProxyUtil {

    public static <T> T getProxy(Class clazz) {
        return (T) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
                new Class[]{clazz.getInterfaces()[0]},
                (proxy, method, args) -> clazz.getMethod(method.getName())
                        .invoke(clazz.newInstance(), args));
    }

}

四.测试验证

1.测试类

public class TestMain {

    public static void main(String[] args) {

        IntermediaryFactory intermediaryFactory = new IntermediaryFactory();
        Intermediary leaseService = intermediaryFactory.getIntermediary(LeaseServiceImpl.class);
        leaseService.lease();

        Intermediary sellService = intermediaryFactory.getIntermediary(RentServiceImpl.class);
        sellService.rent();

        CustomerFactory customerFactory = new CustomerFactory();
        Customer buyer = customerFactory.getCustomer(Buyer.class);
        buyer.deal();

        Customer seller = customerFactory.getCustomer(Seller.class);
        seller.deal();

    }
}

分别模拟出租房源和出售房源场景

2.测试结果


出租
租入
购买
售出

Process finished with exit code 0

以上是关于设计模式抽象工厂模式之模拟出租出售的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之工厂方法和抽象工厂

23中设计模式之抽象工厂模式

大话设计模式之简单工厂模式

设计模式 - 创建型模式_抽象工厂模式

设计模式 - 创建型模式_抽象工厂模式

设计模式 - 创建型模式_抽象工厂模式