大话设计模式--工厂模式

 首先先说简单工厂模式:一个父类拥有一个或者多个子类。父类可以通过多态,实例化多个子类。

代码如下

package effective.company;

public class LeiFeng {
	public void Sweep(){
		System.out.println("扫地。。。");
	}

	public void Wash(){
		System.out.println("洗衣。。");
	}
	public void BuyRice(){
		System.out.println("买米。。");
	}
	public static void main(String[] args) {
		 IFactory factory = new VolunteerFactory();
		 LeiFeng student = factory.CreateLeiFeng();
		 student.BuyRice();
		 student.Sweep();
		 student.Wash();
	}
}
package effective.company;

public class Volunteer extends LeiFeng {
	public void Sweep(){
		System.out.println("志愿者扫地。。。");
	}

	public void Wash(){
		System.out.println("志愿者洗衣。。");
	}
	public void BuyRice(){
		System.out.println("志愿者买米。。");
	}
}
package effective.company;

public class Undergraduate extends LeiFeng {
	public void Sweep(){
		System.out.println("学生扫地。。。");
	}

	public void Wash(){
		System.out.println("学生洗衣。。");
	}
	public void BuyRice(){
		System.out.println("学生买米。。");
	}
	
	
}

客户端调用的时候代码如下:

package effective.company;

public class SimpleFactory {
	public static LeiFeng CreateLeiFeng(String type) {
		LeiFeng lf = null;
		switch (type) {
		case "大学生":
			lf = new Undergraduate();
			break;

		case "志愿者":
			lf = new Volunteer();
			break;
		}
		return lf;
	}

	public static void main(String[] args) {
                LeiFeng s1 = SimpleFactory.CreateLeiFeng("大学生");
		s1.BuyRice();
		LeiFeng s2 = SimpleFactory.CreateLeiFeng("大学生");
		s2.Wash();
		LeiFeng s3 = SimpleFactory.CreateLeiFeng("大学生");
		s3.BuyRice();
}}

从如上代码可以知:简单工厂模式在实例化 调用对应方法的时候产生过多的重复代码。如果修改大学生为志愿者则修改三处地方;

以下是工厂模式:

package effective.company;

public interface IFactory {
	LeiFeng CreateLeiFeng();

}
package effective.company;

public class UndergraduateFactory implements IFactory{

	@Override
	public LeiFeng CreateLeiFeng() {
		// TODO Auto-generated method stub
		return new Undergraduate();
	}

}
package effective.company;

public class VolunteerFactory implements IFactory {

	@Override
	public LeiFeng CreateLeiFeng() {
		// TODO Auto-generated method stub
		return new Volunteer();
	}

}
                    IFactory factory = new VolunteerFactory();//只需修改此处即可
		 LeiFeng student = factory.CreateLeiFeng();
		 student.BuyRice();
		 student.Sweep();
		 student.Wash();

从以上代码可以发现,要把Undergraduate换成Volunteer只需要更改 new VolunteerFactory()这个实现即可,减少了修改代码的量。




你可能感兴趣的:(设计模式)