求助一个开闭原则的JAVA小代码
1,有水果类,苹果类和梨子类实现了水果类这个接口2,水果类有种植,开花,结果3个方法3,园丁类是来NEW出每种水果的(对这个类不能修改)4,在测试类里面不能看到有NEW关...
1,有水果类,苹果类和梨子类实现了水果类这个接口
2,水果类有种植,开花,结果3个方法
3,园丁类是来NEW出每种水果的(对这个类不能修改)
4,在测试类里面不能看到有NEW关键字
1楼的 yanweimin7 会写就牛叉了?只会在这里说风凉话,你问我答,答对了给你分就是了,你刷分就刷,还啰七八嗦说什么,鄙视这种高傲的PIG!
2楼 lincoln1177 look 3.园丁类是来NEW出每种水果的(对这个类不能修改)
ks6466686 符合要求 继续
Apple tempApple;
Pear tempPear;
gardener sinGarden = gardener.getGardener();
tempApple=sinGarden.getFruit(tempPear);
这个APPLE你没有给它初始化,getFruit(tempPear)这里怎么用 展开
2,水果类有种植,开花,结果3个方法
3,园丁类是来NEW出每种水果的(对这个类不能修改)
4,在测试类里面不能看到有NEW关键字
1楼的 yanweimin7 会写就牛叉了?只会在这里说风凉话,你问我答,答对了给你分就是了,你刷分就刷,还啰七八嗦说什么,鄙视这种高傲的PIG!
2楼 lincoln1177 look 3.园丁类是来NEW出每种水果的(对这个类不能修改)
ks6466686 符合要求 继续
Apple tempApple;
Pear tempPear;
gardener sinGarden = gardener.getGardener();
tempApple=sinGarden.getFruit(tempPear);
这个APPLE你没有给它初始化,getFruit(tempPear)这里怎么用 展开
展开全部
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;
}
}
不知这样写是否正确。个人认为这应该是一个工厂模式吧。
所有类的实现都由工厂类(也就是园丁类)完成。
写的只是一个简单工厂模式。
通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。开闭原则在问题描述时就已经实现了。当然这只是对于客户端(也就是测试类)来说,测试类只需要提供要创建对象的描述,系统自动创建相应的对象。而对于工厂类并没有满足开闭原则。
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;
}
}
不知这样写是否正确。个人认为这应该是一个工厂模式吧。
所有类的实现都由工厂类(也就是园丁类)完成。
写的只是一个简单工厂模式。
通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。开闭原则在问题描述时就已经实现了。当然这只是对于客户端(也就是测试类)来说,测试类只需要提供要创建对象的描述,系统自动创建相应的对象。而对于工厂类并没有满足开闭原则。
展开全部
3,园丁类是来NEW出每种水果的(对这个类不能修改)
楼上的 这一条 没有 满足,如果 增加 一个水果,肯定就不符合 开闭原则了...虽然我也是刚刚才查了下什么是OCP
写了一会了,思绪有点乱, 解决不了 static的问题,我发上来把,一会 我下班 回去 寝室 再给你编,你先看看那 给我个建议吧..
写完了,你看看吧 还有,给你推荐个网址,看看这个,你可以学到很多!~
http://www.cnblogs.com/zzj-46000452/archive/2006/09/16/506286.html
import java.lang.*;
interface Fruit
{
public void plant();
public void blossom();
public void outcome();
}
class Apple implements Fruit
{
Apple(){this.plant();}
public void plant(){System.out.println("Plant a apple");};
public void blossom(){System.out.println("Apple blossomed");};
public void outcome(){System.out.println("Apple outcomed");};
}
class Pear implements Fruit
{
Pear(){this.plant();}
public void plant(){System.out.println("Pear a apple");};
public void blossom(){System.out.println("Pear blossomed");};
public void outcome(){System.out.println("Pear outcomed");};
}
interface gardenerBase //Garden,是不能改变的.以后增加一个水果只需要 再写个类继承它!
{
public Fruit getFruit();
}
class AppleGardener implements gardenerBase//种植Apple的Garden
{
private static AppleGardener singleton;
private AppleGardener(){;}
public static AppleGardener getGardener()
{
if(singleton==null)
singleton = new AppleGardener();
return singleton;
}
public Fruit getFruit()
{
return new Apple();
}
}
class PearGardener implements gardenerBase//种植Pear的Garden
{
private static PearGardener singleton;
private PearGardener(){;}
public static PearGardener getGardener()
{
if(singleton==null)
singleton = new PearGardener();
return singleton;
}
public Fruit getFruit()
{
return new Pear();
}
}
public class MyFirstOCPJAVA
{
public static void main(String []a)
{
Fruit tempApple;
gardenerBase appleGarden = AppleGardener.getGardener();
tempApple = appleGarden.getFruit();
Fruit tempPear;
gardenerBase pearGarden = PearGardener.getGardener();
tempPear = pearGarden.getFruit();
}
}
楼上的 这一条 没有 满足,如果 增加 一个水果,肯定就不符合 开闭原则了...虽然我也是刚刚才查了下什么是OCP
写了一会了,思绪有点乱, 解决不了 static的问题,我发上来把,一会 我下班 回去 寝室 再给你编,你先看看那 给我个建议吧..
写完了,你看看吧 还有,给你推荐个网址,看看这个,你可以学到很多!~
http://www.cnblogs.com/zzj-46000452/archive/2006/09/16/506286.html
import java.lang.*;
interface Fruit
{
public void plant();
public void blossom();
public void outcome();
}
class Apple implements Fruit
{
Apple(){this.plant();}
public void plant(){System.out.println("Plant a apple");};
public void blossom(){System.out.println("Apple blossomed");};
public void outcome(){System.out.println("Apple outcomed");};
}
class Pear implements Fruit
{
Pear(){this.plant();}
public void plant(){System.out.println("Pear a apple");};
public void blossom(){System.out.println("Pear blossomed");};
public void outcome(){System.out.println("Pear outcomed");};
}
interface gardenerBase //Garden,是不能改变的.以后增加一个水果只需要 再写个类继承它!
{
public Fruit getFruit();
}
class AppleGardener implements gardenerBase//种植Apple的Garden
{
private static AppleGardener singleton;
private AppleGardener(){;}
public static AppleGardener getGardener()
{
if(singleton==null)
singleton = new AppleGardener();
return singleton;
}
public Fruit getFruit()
{
return new Apple();
}
}
class PearGardener implements gardenerBase//种植Pear的Garden
{
private static PearGardener singleton;
private PearGardener(){;}
public static PearGardener getGardener()
{
if(singleton==null)
singleton = new PearGardener();
return singleton;
}
public Fruit getFruit()
{
return new Pear();
}
}
public class MyFirstOCPJAVA
{
public static void main(String []a)
{
Fruit tempApple;
gardenerBase appleGarden = AppleGardener.getGardener();
tempApple = appleGarden.getFruit();
Fruit tempPear;
gardenerBase pearGarden = PearGardener.getGardener();
tempPear = pearGarden.getFruit();
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先问一下,你知道开闭原则吗,不知道的话有代码也没用
i fule you tototo, 有种就自己写,有种就不交
i fule you tototo, 有种就自己写,有种就不交
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询