设计原则之开闭原则(实例加UML完整例子)

java设计原则

1.开放-封闭原则

1.1 定义

  对拓展开放,对修改关闭:比如当某个业务增加,不是在原类增加方法,而是增加原类的实现类

1.2 UML类图

在这里插入图片描述

1.3 设计背景

  以银行业务为例:

/**
 * @author tbb
 *      银行业务类
 */
public class BankingBusiness 
{
	public void bankSavings()
	{
		System.out.println("存款");
	}
	
	public void drawMoney ()
	{
		System.out.println("取款");
	}
	
	public void transferAccounts()
	{
		System.out.println("转账");
	}
}

/**
 * @author tbb
 *      客户类
 */
public class Client 
{
    /**
               * 行为类型
     */
    private String actionType;

	public String getActionType() {
		return actionType;
	}

	public void setActionType(String actionType) {
		this.actionType = actionType;
	}

	public Client(String actionType) {
		super();
		this.actionType = actionType;
	}
	
}
public class Test
{
    public static void main(String[] args) 
    {
		Client client = new Client("存款");//客户想去银行存款
		BankingBusiness bankingBusiness = new BankingBusiness();
		switch (client.getActionType())
		{
		    case "存款" :bankingBusiness.bankSavings(); break;
		    case "取款" :bankingBusiness.drawMoney();; break;
		    case "转账" :bankingBusiness.transferAccounts();; break;
		    default:break;
		}
		

		
	}
}

  这设计显然是存在问题的,目前设计中就只有存款,取款和转账三个功能,将来如果业务增加了,比如增加理财功能等,就必须要修改BankProcess业务类。我们分析上述设计当有新的需求发生,必须修改现有代码则违反了开放封闭原则

1.4 实现思路

  为达到目的,需对系统进行抽象化设计:象上述存款、取款、转账、理财等行为,可以抽象为银行业务行为。

1.5 实现场景
/**
 * @author tbb
  *     银行业务接口类
 */
public interface BankingBusiness 
{
	public void business();//业务
}
/**
 * @author tbb
 *      存款业务类
 */
public class BankSavings implements BankingBusiness
{

	@Override
	public void business() 
	{
		System.out.println("存款");
	}

}
/**
 * @author tbb
 *      取款业务类
 */
public class DrawMoney implements BankingBusiness
{

	@Override
	public void business() 
	{
       System.out.println("取款");		
	}

}

/**
 * @author tbb
 *       转账业务类
 */
public class TransferAccounts implements BankingBusiness
{

	@Override
	public void business() 
	{
		System.out.println("转账");
	}
}

/**
 * @author tbb
 *      理财业务类
 */
public class ManageMoneyMatters implements BankingBusiness
{

	@Override
	public void business() 
	{
		System.out.println("理财");
	}

}
/**
 * @author tbb
 *      客户类
 */
public class Client 
{
    /**
               * 行为类型
     */
    private String actionType;

	public String getActionType() {
		return actionType;
	}

	public void setActionType(String actionType) {
		this.actionType = actionType;
	}

	public Client(String actionType) {
		super();
		this.actionType = actionType;
	}
	
}
public class Test
{
    public static void main(String[] args) 
    {
		Client client = new Client("理财");
		BankSavings bankSavings = new BankSavings();
		ManageMoneyMatters manageMoneyMatters = new ManageMoneyMatters();
		TransferAccounts transferAccounts = new TransferAccounts();
		DrawMoney drawMoney = new DrawMoney();
		switch (client.getActionType())
		{
		    case "存款" :bankSavings.business(); break;
		    case "取款" :drawMoney.business(); break;
		    case "转账" :transferAccounts.business(); break;
		    case "理财" :manageMoneyMatters.business(); break;
		    default:break;
		}
		
	}
}
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值