抽象工厂模式设计与实现
1. (手杖,长袍) (AK47,军装)
实验代码:
package gsg.g1;
//AK47
public class AK47Product implements WeaponProduct{
String nameProduct;
public String getNameProduct() {
return nameProduct;
}
public void setNameProduct(String nameProduct) {
this.nameProduct = nameProduct;
}
@Override
public void buy() {
System.out.println("买一个AK47");
}
}
package gsg.g1;
public class AncientFactory implements Factory{
@Override
public ClothProduct creatProduct() {
return new UniformProduct();
}
@Override
public WeaponProduct weaponProduct() {
return new AK47Product();
}
}
package gsg.g1;
//衣服类
public interface ClothProduct {
public abstract void buy();
}
package gsg.g1;
public class Customer {
public static void main(String[] args) {
Factory factory1;
factory1 = new AncientFactory();
ClothProduct clothProduct;
WeaponProduct weaponProduct;
clothProduct = factory1.creatProduct();
clothProduct.buy();
weaponProduct = factory1.weaponProduct();
weaponProduct.buy();
}
}
package gsg.g1;
public class Customer2 {
public static void main(String[] args) {
Factory factory2;
ClothProduct clothProduct;
WeaponProduct weaponProduct;
factory2 = new ModernFactory();
clothProduct = factory2.creatProduct();
clothProduct.buy();
weaponProduct = factory2.weaponProduct();
weaponProduct.buy();
}
}
package gsg.g1;
public interface Factory {
public ClothProduct creatProduct();
public WeaponProduct weaponProduct();
}
package gsg.g1;
public class ModernFactory implements Factory{
//衣服
@Override
public ClothProduct creatProduct() {
return new RobesProduct();
}
//武器
@Override
public WeaponProduct weaponProduct() {
return new WalkStickProduct();
}
}
package gsg.g1;
//长袍
public class RobesProduct implements ClothProduct{
String nameProduct;
public String getNameProduct() {
return nameProduct;
}
public void setNameProduct(String nameProduct) {
this.nameProduct = nameProduct;
}
@Override
public void buy() {
System.out.println("买一个长袍");
}
}
package gsg.g1;
//军装
public class UniformProduct implements ClothProduct{
String nameProduct;
public String getNameProduct() {
return nameProduct;
}
public void setNameProduct(String nameProduct) {
this.nameProduct = nameProduct;
}
@Override
public void buy() {
System