【java设计模式】工厂模式 (工厂方法,抽象工厂,简单工厂)


首先看一下简单工厂模式:(一个抽象类,多个具体实现类,一个工厂类)


步骤一:建立接口Sender

public interface Sender {
    public void Send();
}

步骤二:建立实现类MailSender和SmsSender

public class MailSender implements Sender{

	public void Send() {
		 System.out.println("这是Mail发送方式");
	}

}
public class SmsSender implements Sender{

	public void Send() {
		System.out.println("这是SMS发送方式");
	}

}

步骤三:建立管理实现类的工厂类

public class SendFactory {
    public Sender produce(String type) {
    		if("mail".equals(type)){
    			return new MailSender();
    		}else if("sms".equals(type)) {
    			return new SmsSender();
    		}else {
    			System.out.println("请输入正确类型");
    			return null;
    		}
    }
}

建立测试类

public class FactoryTest {
   public static void main(String[] args) {
	SendFactory factory=new SendFactory();
	Sender sender=factory.produce("sms");
	 sender.Send();
  }
}



工厂方法类(一个抽象产品类,多个具体产品实现类,一个抽象工厂类,多个具体工厂类,每个具体工厂类只能创建【一个】具体产品类的实例)


步骤一:建立 抽象产品类Sender


public interface Sender {
   public void send();
}

步骤二:建立 多个具体产品实现类MailSender 和SmsSender

public class MailSender implements Sender{

	public void send() {
		System.out.println("这是邮箱发送方式");
	}
}
public class SmsSender implements Sender{

	@Override
	public void send() {
		 System.out.println("这是短信发送方式");
	}
}

步骤三:建立  一个抽象工厂类Provider
public interface Provider {
  public Sender produce();
}


步骤四:建立具体工厂具体实现类(只能创建一个具体产品类的实例)

public class SendMailFactory implements Provider{

	@Override
	public Sender produce() {
		return new MailSender();
	}
}

public class SendSmsFactory implements Provider {

	@Override
	public Sender produce() {
		return new SmsSender();
	}
   
}

步骤五:建立测试类

public class FactoryTest {
	public static void main(String[] args) {
		 Provider provider=new SendMailFactory();
		 Sender sender=provider.produce();
		 sender.send();
	}
  
}



抽象工厂模式(多个抽象产品类,多个具体产品类,一个抽象工厂类,多个具体工厂类,每个具体工厂类可以创建【多个】具体产品类的实例)


步骤一:创建一个抽象产品类。其中定义抽象产品公有的属性方法

public interface IUser {
  public void serUserName();
}


步骤二:定义抽象产品的实现类(这里有两个,一个SqlServerUser,一个AccessUser)

public class SqlServerUser implements IUser {

	public void serUserName() {
        System.out.println("我是sqlServer");		
	}
}
public class AccessUser implements IUser {

	public void serUserName() {
        System.out.println("我是AccessUser");		
	}
}

步骤三:建立抽象工厂类,里面包含各个工厂公有的方法【抽象工厂的特点:拥有多个产品的实例】

public interface IFractory {
    public void createUser(IUser user);
    public void createDepartment(IDepartment department);
}

步骤四:建立工厂实现类 AccessFactory 和SqlServerFactory 【抽象工厂的特点:拥有多个产品的实例】

public class AccessFactory implements IFractory{

	private SqlServerUser user;
	private IDepartment department;
	@Override
	public void createUser(IUser user) {
	  this.user=(SqlServerUser) user;
	}
	
	@Override
	public void createDepartment(IDepartment department) {
		this.department=department;
	}

}
public class SqlServerFactory implements IFractory{

	private SqlServerUser user;
	private IDepartment department;
	@Override
	public void createUser(IUser user) {
	  this.user=(SqlServerUser) user;
	  user.serUserName();
	}

	@Override
	public void createDepartment(IDepartment department) {
		this.department=department;
		user.serUserName();
	}

}

步骤五:建立测试类

public class Test {
   public static void main(String[] args) {
	   IUser user=new SqlServerUser();
	   IFractory factory=new SqlServerFactory();
	   factory.createUser(user);
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值