1:工厂方法模式:
public class FactoryTest { //定义抽象产品类 public abstract class Phone { public abstract String brandName(); } //定义具体实现类 public class Huawei extends Phone { @Override public String brandName() { return "my name is Huawei"; } } //定义具体实现类 public class Xiaomi extends Phone { @Override public String brandName() { return "my name is Xiaomi"; } } //定义抽象工厂 public abstract class Factory { public abstract Phone generatePhone(); } //定义Huawei工厂,生成华为手机 public class HuaweiFactory extends Factory { @Override public Phone generatePhone() { return new Huawei(); } } //定义Xiaomi工厂,生成小米手机 public class XiaomiFactory extends Factory { @Override public Phone generatePhone() { return new Huawei(); } } //使用: public void test() { Factory huaweiFactory = new HuaweiFactory(); Phone huaweiPhone = huaweiFactory.generatePhone(); Log.d("test", "phone name--->" + huaweiPhone.brandName()); Factory xiaomiFactory = new XiaomiFactory(); Phone xiaomiPhone = xiaomiFactory.generatePhone(); Log.d("test", "phone name--->" + xiaomiPhone.brandName()); } }
改进:
public class FactoryTest { //定义抽象产品类 public abstract class Phone { public abstract String brandName(); } //定义具体实现类 public class Huawei extends Phone { @Override public String brandName() { return "my name is Huawei"; } } //定义具体实现类 public class Xiaomi extends Phone { @Override public String brandName() { return "my name is Xiaomi"; } } //定义抽象工厂 public abstract class Factory { public abstract <T extends Phone> T generatePhone(Class<T> tClass); } //具体工厂 public class ConcretFactory extends Factory { @Override public <T extends Phone> T generatePhone(Class<T> tClass) { Phone phone = null; try { phone = (Phone) Class.forName(tClass.getName()).newInstance(); Log.e("test", "生产了一个手机"); phone.brandName(); } catch (Exception e) { } return (T) phone; } } //使用: public void test() { Phone huaweiPhone = new ConcretFactory().generatePhone(Huawei.class); huaweiPhone.brandName(); } }
标签:Huawei,abstract,模式,public,Phone,brandName,工厂,class From: https://www.cnblogs.com/wnpp/p/17719413.html