网站建设资讯

NEWS

网站建设资讯

开闭原则java代码演示 Java开闭原则

求助一个开闭原则的JAVA小代码

public class TestFruit {

为三山等地区用户提供了全套网页设计制作服务,及三山网站建设行业解决方案。主营业务为成都做网站、网站建设、三山网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

public static void main(String[] args) {

Fruit fruit;

fruit = Gardener.NewFruit("apple");

fruit.grow();

fruit.Flowering();

fruit.Fruiting();

fruit = Gardener.NewFruit("pear");

fruit.grow();

fruit.Flowering();

fruit.Fruiting();

}

}

interface Fruit {

void grow();

void Flowering();

void Fruiting();

}

class Apple implements Fruit {

public void Flowering() {

System.out.println("开花的是苹果");

}

public void Fruiting() {

System.out.println("结果的是苹果");

}

public void grow() {

System.out.println("种植的是苹果");

}

}

class Pear implements Fruit {

public void Flowering() {

System.out.println("开花的是梨");

}

public void Fruiting() {

System.out.println("结果的是梨");

}

public void grow() {

System.out.println("种植的是梨");

}

}

final class Gardener {

public static Fruit NewFruit(String fruitname) {

if (fruitname.equals("apple")) {

return new Apple();

} else if (fruitname.equals("pear")) {

return new Pear();

}

return null;

}

}

不知这样写是否正确。个人认为这应该是一个工厂模式吧。

所有类的实现都由工厂类(也就是园丁类)完成。

写的只是一个简单工厂模式。

通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。开闭原则在问题描述时就已经实现了。当然这只是对于客户端(也就是测试类)来说,测试类只需要提供要创建对象的描述,系统自动创建相应的对象。而对于工厂类并没有满足开闭原则。

Java中的开闭原则是什么意思

开闭原则即封闭对原来代码的修改,开放对原来代码的扩展(如类的继承,接口的实现等)

开闭原则是一种设计思想,并不局限于java语言

大概意思就是这些,但是要真正掌握运用开闭原则,还是要多多实践,多多体会

帮忙编个java程序(很简单)

设计模式里对这类设计有很详细的说明,看一下挺好。

你这个例子也很典型,对理解接口来说,挺不错的一个例子

//接口,在这里用接口是很恰当的,因为任何水果都有计算各自的总价格的行为,这个行为分离出来,最好的方法就是做成接口

public interface IAccount {

public int getAccount();//get one fruit price

}

//水果类,因为任何一种水果的价格计算都是质量乘以单价,所以计算总价值的方法可以直接在水果类中实现,但是由于它只是个抽象类,真正执行的时候,是计算了具体某种水果的单价乘以质量。//这样就省去了在每个派生出来的水果类里实现计算价值的方法。

public abstract class Fruit implements IAccount{

protected int weight;

protected int price;

public int getAccount() {

return this.price*this.weight;

}

}

//具体的水果类,水果类的派生类

//苹果类

public class Apple extends Fruit{

public Apple(int w) {

this.price = 2;//因为每种水果不同,所以不必要在new它的时候再传给它,直接在类里赋值即可,至于好的设计是完成相应的get和set方法,这个再扩展。

this.weight = w;

}

}

//桔子类

public class Orange extends Fruit{

public Orange(int w) {

this.price = 3;//桔子的价格就不同于苹果的了

this.weight = w;

}

}

//交易类

public class Bussiness {

/**

* @param args

*/

public static void main(String[] args) {

Fruit apple = new Apple(10);

Fruit orange = new Orange(15);

int allMoney = apple.getAccount() + orange.getAccount();

System.out.println(allMoney);

}

}

这样,水果类就可以很方便的派生,只需声明一个类继承水果类(一定要是个抽象类),然后给price赋值,就可以在交易类里实例化并计算总价值,而不需要改动水果类里的任何代码。


名称栏目:开闭原则java代码演示 Java开闭原则
分享链接:http://cdweb.net/article/docdidc.html